importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.ObjectUtils.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.UserUtils.js
//@include lib_sol.common.ix.FunctionBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.UserToIndex" });
/**
* Writes a username into a index field directly.
*
* If used on a workflow user node the name of the user responsible for the node is set. All other cases will set the user name of the current session.
*
* # As workflow node
*
* ObjId is set based on the element that the workflow is attached to.
* Following configuration should be applied to the comments field.
*
* {
* "fieldName": "INVOICE_USER"
* }
*
* @author JHR, ELO Digital Office GmbH
* @version 1.03.000
*
* @eloix
* @requires sol.Logger
* @requires sol.common.ObjectUtils
* @requires sol.common.SordUtils
* @requires sol.common.JsonUtils
* @requires sol.common.WfUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.FunctionBase
*
*/
sol.define("sol.common.ix.functions.UserToIndex", {
extend: "sol.common.ix.FunctionBase",
requiredConfig: ["objId"],
/**
* @cfg {string} fieldName (required)
* Index field for username
*/
/**
* @cfg {string} nodeId
* If specified, the nodeId of the current workflow node
*/
/**
* @cfg {Boolean} [clear=false] optional
* If true the field will be cleared
*/
/**
* @cfg {Boolean} [append=false] (optional)
* If true the username will be appended
*/
/**
* @cfg {Boolean} [distinct=true] (optional)
* If `true` a username will only be appended if it is not already in the field (prevents duplicates). Parameter is only used if `append = true`.
*/
/**
* @cfg {Boolean} [sort=true] (optional)
* If `true` the usernames will be ordered alphabetically. In order to preserve the sequence of entry this has to be set to false. Parameter is only used if `append = true`.
*/
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
},
/**
* Sets the username.
*/
process: function () {
var me = this,
newUserNames = [],
sord, conn, userNames, i;
conn = (typeof ixConnectAdmin !== "undefined") ? ixConnectAdmin : ixConnect,
me.fieldName = me.fieldName || "CURRENT_USER";
sord = conn.ix().checkoutSord(me.objId, SordC.mbAllIndex, LockC.NO);
if (!me.userName) {
me.userName = sol.common.WfUtils.getNodeUser(me.wfDiagram, me.nodeId, { useSessionUserAlternatively: true }) + "";
}
if (me.clear) {
sol.common.SordUtils.setObjKeyValues(sord, me.fieldName, null);
me.logger.debug(["Clear users from index field '{0}'", me.fieldName]);
} else if (me.append) {
userNames = sol.common.SordUtils.getObjKeyValues(sord, me.fieldName) || [];
for (i = 0; i < userNames.length; i++) {
newUserNames.push(userNames[i] + "");
}
if ((me.distinct === false) || (newUserNames.indexOf(me.userName) < 0)) {
newUserNames.push(me.userName);
if (me.sort !== false) {
newUserNames.sort();
}
sol.common.SordUtils.setObjKeyValues(sord, me.fieldName, newUserNames);
me.logger.debug(["Add user name '{0}' to index field '{1}'", me.userName, me.fieldName]);
}
} else {
sol.common.SordUtils.setObjKeyValue(sord, me.fieldName, me.userName);
me.logger.debug(["Set index field '{0}' to user name '{1}'", me.fieldName, me.userName]);
}
conn.ix().checkinSord(sord, SordC.mbAllIndex, LockC.NO);
}
});
/**
* @member sol.common.ix.functions.UserToIndex
* @static
* @inheritdoc sol.common.ix.FunctionBase#onEnterNode
*/
function onEnterNode(clInfo, userId, wfDiagram, nodeId) {
var params, module;
logger.enter("onEnterNode_UserToIndex", { flowId: wfDiagram.id, nodeId: nodeId });
params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);
params.objId = wfDiagram.objId;
params.wfDiagram = wfDiagram;
params.nodeId = nodeId;
sol.common.WfUtils.checkMainAdminWf(wfDiagram);
module = sol.create("sol.common.ix.functions.UserToIndex", params);
module.process();
logger.exit("onEnterNode_UserToIndex");
}
/**
* @member sol.common.ix.functions.UserToIndex
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(clInfo, userId, wfDiagram, nodeId) {
var params, module;
logger.enter("onExitNode_UserToIndex", { flowId: wfDiagram.id, nodeId: nodeId });
params = sol.common.WfUtils.parseAndCheckParams(wfDiagram, nodeId);
params.objId = wfDiagram.objId;
params.wfDiagram = wfDiagram;
params.nodeId = nodeId;
sol.common.WfUtils.checkMainAdminWf(wfDiagram);
module = sol.create("sol.common.ix.functions.UserToIndex", params);
module.process();
logger.exit("onExitNode_UserToIndex");
}
/**
* @member sol.common.ix.functions.UserToIndex
* @method RF_sol_function_UserToIndex
* @static
* @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
*/
function RF_sol_function_UserToIndex(ec, args) {
var params, module;
logger.enter("RF_sol_function_UserToIndex", args);
params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args, "objId");
sol.common.ix.RfUtils.checkMainAdminRights(ec.user, params);
module = sol.create("sol.common.ix.functions.UserToIndex", params);
module.process();
logger.exit("RF_sol_function_UserToIndex");
}